var opt = {piro_speed : 700,bg_alpha : 0.5,piro_scroll : true};
var my_gall_obj = $('a[class*="pirobox"]');
var piroMap = null;
var gall_settings = null;
var piro_gallery = null;
function piroFadeIn(speed, callback) {
	$(this).fadeIn(speed, function() {
		if (jQuery.browser.msie)
			$(this).get(0).style.removeAttribute('filter');
		if (callback != undefined)
			callback();
	});
};
function piroFadeOut(speed, callback) {
	$(this).fadeOut(speed, function() {
		if (jQuery.browser.msie)
			$(this).get(0).style.removeAttribute('filter');
		if (callback != undefined)
			callback();
	});
};
function initPiroBoxExt() {
	piroMap = new Object();
	gall_settings = [];
	for (var i = 0; i < my_gall_obj.length; i++) {
		var it = $(my_gall_obj[i]);
		piroMap['a.' + it.attr('class').match(/^pirobox_gall\w*/)] = 0;
	}
	for ( var key in map) {
		gall_settings.push(key);
	}
	for (var i = 0; i < gall_settings.length; i++) {
		$(gall_settings[i] + ':first').addClass('first');
		$(gall_settings[i] + ':last').addClass('last');
	}
	piro_gallery = $(my_gall_obj);
	$('a[class*="pirobox_gall"]').each(function(rev) {
		this.rev = rev + 0
	});
}
(function($) {
	$.fn.piroBox_ext = function(opt) {

		
		
		$.fn.piroRefresh = function() {
			my_gall_obj = $('a[class*="pirobox"]');
			map = new Object();
			for (var i = 0; i < my_gall_obj.length; i++) {
				var it = $(my_gall_obj[i]);
				map['a.' + it.attr('class').match(/^pirobox_gall\w*/)] = 0;
			}
			gall_settings = new Array();
			for ( var key in map) {
				gall_settings.push(key);
			}
			for (var i = 0; i < gall_settings.length; i++) {
				$(gall_settings[i] + ':first').addClass('first');
				$(gall_settings[i] + ':last').addClass('last');
			}
			
		};
		var struct = ('<div class="piro_overlay"></div>'
				+ '<table class="piro_html"  cellpadding="0" cellspacing="0">'
				+ '<tr>'
				+ '<td class="h_t_l"></td>'
				+ '<td class="h_t_c" title="drag me!!"></td>'
				+ '<td class="h_t_r"></td>'
				+ '</tr>'
				+ '<tr>'
				+ '<td class="h_c_l"></td>'
				+ '<td class="h_c_c">'
				+ '<div class="piro_loader" title="close"><span></span></div>'
				+ '<div class="resize">'
				+ '<div class="nav_container">'
				+ '<a href="#prev" class="piro_prev" title="previous"><i class="fa fa-angle-left"></i></a>'
				+ '<a href="#next" class="piro_next" title="next"><i class="fa fa-angle-right"></i></a>'
				+ '<div class="piro_prev_fake"><i class="fa fa-angle-left"></i></div>'
				+ '<div class="piro_next_fake"><i class="fa fa-angle-right"></i></div>'
				+ '<div class="piro_close" title="close"></div>' + '</div>'
				+ '<div class="caption"></div>' + '<div class="div_reg"></div>'
				+ '</div>' + '</td>' + '<td class="h_c_r"></td>' + '</tr>'
				+ '<tr>' + '<td class="h_b_l"></td>'
				+ '<td class="h_b_c"></td>' + '<td class="h_b_r"></td>'
				+ '</tr>' + '</table>');
		$('body').append(struct);
		var wrapper = $('.piro_html'), piro_capt = $('.caption'), piro_bg = $('.piro_overlay'), piro_next = $('.piro_next'), piro_prev = $('.piro_prev'), piro_next_fake = $('.piro_next_fake'), piro_prev_fake = $('.piro_prev_fake'), piro_close = $('.piro_close'), div_reg = $('.div_reg'), piro_loader = $('.piro_loader'), resize = $('.resize'), btn_info = $('.btn_info');
		var rz_img = 0.95;
		if ($.browser.msie) {
			wrapper.draggable({
				handle : '.h_t_c,.h_b_c,.div_reg img'
			});
		} else {
			wrapper.draggable({
				handle : '.h_t_c,.h_b_c,.div_reg img',
				opacity : 0.80
			});
		}
		var y = $(window).height();
		var x = $(window).width();
		$('.nav_container').hide();
		wrapper.css({
			left : ((x / 2) - (250)) + 'px',
			top : parseInt($(document).scrollTop()) + (100)
		});
		$(wrapper).add(piro_capt).add(piro_bg).hide();
		piro_bg.css({
			'opacity' : 0.5
		});
		$(piro_prev).add(piro_next).bind(
				'click',
				function(c) {
					$('.nav_container').hide();
					c.preventDefault();
					piro_next.add(piro_prev).hide();
					var obj_count = parseInt($('a[class*="pirobox_gall"]')
							.filter('.item').attr('rev'));
					var start = $(this).is('.piro_prev') ? $(
							'a[class*="pirobox_gall"]').eq(obj_count - 1) : $(
							'a[class*="pirobox_gall"]').eq(obj_count + 1);
					start.click();
				});
		$('html').bind('keyup', function(c) {
			if (c.keyCode == 27) {
				c.preventDefault();
				if ($(piro_close).is(':visible')) {
					close_all();
				}
			}
		});
		$('html').bind('keyup', function(e) {
			if ($('.item').is('.first')) {
			} else if (e.keyCode == 37) {
				e.preventDefault();
				if ($(piro_close).is(':visible')) {
					piro_prev.click();
				}
			}
		});
		$('html').bind('keyup', function(z) {
			if ($('.item').is('.last')) {
			} else if (z.keyCode == 39) {
				z.preventDefault();
				if ($(piro_close).is(':visible')) {
					piro_next.click();
				}
			}
		});
		$(window).resize(function() {
			var new_y = $(window).height();
			var new_x = $(window).width();
			var new_h = wrapper.height();
			var new_w = wrapper.width();
			wrapper.css({
				left : ((new_x / 2) - (new_w / 2)) + 'px',
				top : parseInt($(document).scrollTop()) + (new_y - new_h) / 2
			});
		});
		function scrollIt() {
			$(window).scroll(
					function() {
						var new_y = $(window).height();
						var new_x = $(window).width();
						var new_h = wrapper.height();
						var new_w = wrapper.width();
						wrapper.css({
							left : ((new_x / 2) - (new_w / 2)) + 'px',
							top : parseInt($(document).scrollTop())
									+ (new_y - new_h) / 2
						});
					});
		}
		if (opt.piro_scroll == true) {
			scrollIt()
		}
		$(piro_gallery)
				.each(
						function() {
							var descr = $(this).attr('title');
							var params = $(this).attr('data-rel').split('-');
							var p_link = $(this).attr('href');
							$(this).unbind();
							$(this).bind(
									'click',
									function(e) {
										piro_bg.css({
											'opacity' : 0.5
										});
										e.preventDefault();
										piro_next.add(piro_prev).hide().css(
												'visibility', 'hidden');
										$(piro_gallery).filter('.item')
												.removeClass('item');
										$(this).addClass('item');
										open_all();
										if ($(this).is('.first')) {
											piro_prev.hide();
											piro_next.show();
											piro_prev_fake.show().css({
												'opacity' : 0.5,
												'visibility' : 'hidden'
											});
										} else {
											piro_next.add(piro_prev).show();
											piro_next_fake.add(piro_prev_fake)
													.hide();
										}
										if ($(this).is('.last')) {
											piro_prev.show();
											piro_next_fake.show().css({
												'opacity' : 0.5,
												'visibility' : 'hidden'
											});
											piro_next.hide();
										}
										if ($(this).is('.pirobox')) {
											piro_next.add(piro_prev).hide();
										}
									});
							function open_all() {
								wrapper.add(piro_bg).add(div_reg).add(
										piro_loader).show();
								function animate_html() {
									if (params[1] == 'full'
											&& params[2] == 'full') {
										params[2] = $(window).height() - 70;
										params[1] = $(window).width() - 55;
									}
									var y = $(window).height();
									var x = $(window).width();
									piro_close.hide();
									div_reg.add(resize).animate({
										'height' : +(params[2]) + 'px',
										'width' : +(params[1]) + 'px'
									}, opt.piro_speed).css('visibility',
											'visible');
									wrapper
											.animate(
													{
														height : +(params[2])
																+ 20 + 'px',
														width : +(params[1])
																+ 20 + 'px',
														left : ((x / 2) - ((params[1]) / 2 + 10))
																+ 'px',
														top : parseInt($(
																document)
																.scrollTop())
																+ (y - params[2])
																/ 2 - 10
													},
													opt.piro_speed,
													function() {
														piro_next
																.add(piro_prev)
																.css(
																		{
																			'height' : '20px',
																			'width' : '20px'
																		});
														piro_next
																.add(piro_prev)
																.add(
																		piro_prev_fake)
																.add(
																		piro_next_fake)
																.css(
																		'visibility',
																		'visible');
														$('.nav_container')
																.show();
														piro_close.show();
													});
								}
								function animate_image() {
									var img = new Image();
									img.onerror = function() {
										piro_capt.html('');
										img.src = "http://www.pirolab.it/pirobox/js/error.jpg";
									}
									img.onload = function() {
										piro_capt.add(btn_info).hide();
										var y = $(window).height();
										var x = $(window).width();
										var imgH = img.height;
										var imgW = img.width;
										if (imgH + 20 > y || imgW + 20 > x) {
											var _x = (imgW + 20) / x;
											var _y = (imgH + 20) / y;
											if (_y > _x) {
												imgW = Math.round(img.width
														* (rz_img / _y));
												imgH = Math.round(img.height
														* (rz_img / _y));
											} else {
												imgW = Math.round(img.width
														* (rz_img / _x));
												imgH = Math.round(img.height
														* (rz_img / _x));
											}
										} else {
											imgH = img.height;
											imgW = img.width;
										}
										var y = $(window).height();
										var x = $(window).width();
										$(img).height(imgH).width(imgW).hide();
										$(img).fadeOut(300, function() {
										});
										$('.div_reg img').remove();
										$('.div_reg').html('');
										div_reg.append(img).show();
										$(img).addClass('immagine');
										div_reg.add(resize).animate({
											height : imgH + 'px',
											width : imgW + 'px'
										}, opt.piro_speed);
										wrapper
												.animate(
														{
															height : (imgH + 20)
																	+ 'px',
															width : (imgW + 20)
																	+ 'px',
															left : ((x / 2) - ((imgW + 20) / 2))
																	+ 'px',
															top : parseInt($(
																	document)
																	.scrollTop())
																	+ (y - imgH)
																	/ 2 - 20
														},
														opt.piro_speed,
														function() {
															var cap_w = resize
																	.width();
															piro_capt.css({
																width : cap_w
																		+ 'px'
															});
															piro_loader.hide();
															$(img)
																	.fadeIn(
																			300,
																			function() {
																				piro_close
																						.add(
																								btn_info)
																						.show();
																				piro_capt
																						.slideDown(200);
																				piro_next
																						.add(
																								piro_prev)
																						.css(
																								{
																									'height' : '20px',
																									'width' : '20px'
																								});
																				piro_next
																						.add(
																								piro_prev)
																						.add(
																								piro_prev_fake)
																						.add(
																								piro_next_fake)
																						.css(
																								'visibility',
																								'visible');
																				$(
																						'.nav_container')
																						.show();
																				resize
																						.resize(function() {
																							NimgW = img.width;
																							NimgH = img.heigh;
																							piro_capt
																									.css({
																										width : (NimgW)
																												+ 'px'
																									});
																						});
																			});
														});
									}
									img.src = p_link;
									piro_loader.click(function() {
										img.src = 'about:blank';
									});
								}
								switch (params[0]) {
								case 'iframe':
									div_reg.html('').css('overflow', 'hidden');
									resize.css('overflow', 'hidden');
									piro_close.add(btn_info).add(piro_capt)
											.hide();
									animate_html();
									div_reg
											.piroFadeIn(
													300,
													function() {
														div_reg
																.append('<iframe id="my_frame" class="my_frame" src="'
																		+ p_link
																		+ '" frameborder="0" allowtransparency="true" scrolling="auto" align="top"></iframe>');
														$('.my_frame')
																.css(
																		{
																			'height' : +(params[2])
																					+ 'px',
																			'width' : +(params[1])
																					+ 'px'
																		});
														piro_loader.hide();
													});
									break;
								case 'content':
									div_reg.html('').css('overflow', 'auto');
									resize.css('overflow', 'auto');
									$('.my_frame').remove();
									piro_close.add(btn_info).add(piro_capt)
											.hide();
									animate_html()
									div_reg.piroFadeIn(300, function() {
										div_reg.load(p_link);
										piro_loader.hide();
									});
									break;
								case 'inline':
									div_reg.html('').css('overflow', 'auto');
									resize.css('overflow', 'auto');
									$('.my_frame').remove();
									piro_close.add(btn_info).add(piro_capt)
											.hide();
									animate_html()
									div_reg.piroFadeIn(300, function() {
										$(p_link).clone(true).appendTo(div_reg)
												.piroFadeIn(300);
										piro_loader.hide();
									});
									break
								case 'gallery':
									div_reg.css('overflow', 'hidden');
									resize.css('overflow', 'hidden');
									$('.my_frame').remove();
									piro_close.add(btn_info).add(piro_capt)
											.hide();
									if (descr == "") {
										piro_capt.html('');
									} else {
										piro_capt.html('<p>' + descr + '</p>');
									}
									animate_image();
									break;
								case 'single':
									piro_close.add(btn_info).add(piro_capt)
											.hide();
									div_reg.html('').css('overflow', 'hidden');
									resize.css('overflow', 'hidden');
									$('.my_frame').remove();
									if (descr == "") {
										piro_capt.html('');
									} else {
										piro_capt.html('<p>' + descr + '</p>');
									}
									animate_image();
									break
								}
							}
						});
		$('.immagine').on('click', function() {
			piro_capt.slideToggle(200);
		});
		function close_all() {
			if ($('.piro_close').is(':visible')) {
				$('.my_frame').remove();
				wrapper.add(div_reg).add(resize).stop();
				var ie_sucks = wrapper;
				if ($.browser.msie) {
					ie_sucks = div_reg.add(piro_bg);
					$('.div_reg img').remove();
				} else {
					ie_sucks = wrapper.add(piro_bg);
				}
				ie_sucks.piroFadeOut(200, function() {
					div_reg.html('');
					piro_loader.add(piro_capt).add(btn_info).hide();
					$('.nav_container').hide();
					piro_bg.add(wrapper).hide().css('visibility', 'visible');
				});
			}
		}
		piro_close.add(piro_loader).add(piro_bg).bind('click', function(y) {
			y.preventDefault();
			close_all();
		});
	}
})(jQuery);